資料型別 (Data Type) 是用來告訴電腦系統的編繹器 (compiler) 如何處理這組資料,如果不當使用資料型別,當程式執行時就會發生錯誤。
JavaScript 在程式語言的型別系統 (Type system) 中屬於 「弱型別」 語言,也可以稱為「動態型別」語言,因為它在宣告變數時不用指定型別給該變數,例如直接指定這個變數為數字型別或是字串型別。雖然這樣有語法簡潔的優點,但也容易因「自動轉型」的特性產生許多問題。(相反地,強型別語言就是在宣告變數時就必須要指定型別給該變數)
我們平常大多會說變數的資料型別,但更完整地說應該是此變數的值的資料型別,變數本身沒有型別,值才有。而 JavaScript 支援的型別主要有兩類:
基本型別 (Primitives)
true
或 false
物件型別 (Object):除了上述的基本型別,其他都可以歸類至物件型別如陣列 (array)、物件 (object)、函式 (function)等
當我們想要辨識某個變數的型別時,我們可以使用 typeof
這個運算子,使用方式為
typeof 運算元 // 可無小括號
typeof (運算元) // 也可以有小括號,兩者皆可
typeof
運算子會回傳該運算元類型的字串如下:
typeof 100; // "number"
typeof "iThome"; // "string"
typeof true; // "boolean"
typeof {}; // "object"
除了上述直接對值進行判斷,我們也可以在宣告變數後對變數使用 typeof
來進行辨識:
let apple = 1;
let myName = "Key";
let func = new Function("3+7");
let today = new Date();
會回傳下列結果:
console.log(typeof func); // 回傳 "function"
console.log(typeof myName); // 回傳 "string"
console.log(typeof apple); // 回傳 "number"
console.log(typeof today); // 回傳 "object"
console.log(typeof doesntExist); // 回傳 "undefined"
實際操作如圖:
對於特性,則會回傳該特性的值的類型:
typeof string.length; // 回傳 "number"
值得注意的是會有些「例外」,如:
typeof null; // "object"
許多例外在之後有機會會陸續講到。
今天先跟大家一起認識資料型別有哪些類型,以及使用 typeof
運算子來辨識型別,明天將會針對每個型別做更深入的探討。